package br.edu.ifrn.persistencia;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import br.edu.ifrn.beans.Aluno;

public class AlunoDAO {
	Conexao conexao = Conexao.getInstance();
	
	public void inserirAluno(Aluno aluno) {
		
		PreparedStatement ps = null;
		try {
			String query = "INSERT INTO pessoa VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
			
			ps = conexao.getPreparedStatement(query);
			
			ps.setString(1, aluno.getMatricula());
			ps.setString(2, aluno.getNome());
			ps.setString(3, aluno.getTelefone());
			ps.setString(4, aluno.getCpf());
			ps.setString(5, aluno.getRg());
			ps.setString(6, aluno.getLogradouro());
			ps.setString(7, aluno.getNumero());
			ps.setString(8, aluno.getBairro());
			ps.setString(9, aluno.getCidade());
			ps.setString(10, aluno.getUF());
			ps.setString(11, aluno.getComplemento());
			ps.setString(12, aluno.getEmail());
			ps.setString(13, aluno.getHabilidades());
			ps.setString(14, aluno.getNomePai());
			ps.setString(15, aluno.getProfissaoPai());
			ps.setString(16, aluno.getNomeMae());
			ps.setString(17, aluno.getProfissaoMae());
			ps.setNull(18, java.sql.Types.NULL);
			ps.setBoolean(19, false);
			ps.setString(20, aluno.getSenha());

			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	public void deletarAluno(Aluno a) {
		PreparedStatement ps = null;
		try {
			String query = "DELETE FROM pessoa WHERE idPessoa=?";
			ps = conexao.getPreparedStatement(query);
			ps.setString(1, a.getMatricula());
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void editarAluno(Aluno a) { 
		PreparedStatement ps = null;
		try {
			String query = "UPDATE pessoa SET  nome=?, telefone=?, cpf=?, rg=?, logradouro=?, numero=?, bairro=?, cidade=?, " +
					"uf=?, complemento=?, email=?, habilidades=?, nomePai=?, profissaoPai=?, nomeMae=?, profissaoMae=? WHERE idPessoa=?";
			
			ps = conexao.getPreparedStatement(query);

			ps.setString(1, a.getNome());
			ps.setString(2, a.getTelefone());
			ps.setString(3, a.getCpf());
			ps.setString(4, a.getRg());
			ps.setString(5, a.getLogradouro());
			ps.setString(6, a.getNumero());
			ps.setString(7, a.getBairro());
			ps.setString(8, a.getCidade());
			ps.setString(9, a.getUF());
			ps.setString(10, a.getComplemento());
			ps.setString(11, a.getEmail());
			ps.setString(12, a.getHabilidades());
			ps.setString(13, a.getNomePai());
			ps.setString(14, a.getProfissaoPai());
			ps.setString(15, a.getNomeMae());
			ps.setString(16, a.getProfissaoMae());
			ps.setString(17, a.getMatricula());
			
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public List<Aluno> listarAlunos() { 
		List<Aluno> alunos = new ArrayList<Aluno>();
		PreparedStatement ps = null;
		try {
			String query = "SELECT * FROM pessoa WHERE egresso = 0";
			ps = conexao.getPreparedStatement(query);
			ResultSet rs = ps.executeQuery();
			while (rs.next()) {
				Aluno a = new Aluno();
				a.setMatricula(rs.getString("idPessoa"));
				a.setNome(rs.getString("nome"));
				a.setTelefone(rs.getString("telefone"));
				a.setCpf(rs.getString("cpf"));
				a.setRg(rs.getString("rg"));
				a.setLogradouro(rs.getString("logradouro"));
				a.setNumero(rs.getString("numero"));
				a.setBairro(rs.getString("bairro"));
				a.setCidade(rs.getString("cidade"));
				a.setUF(rs.getString("uf"));
				a.setComplemento(rs.getString("complemento"));
				a.setEmail(rs.getString("email"));
				a.setHabilidades(rs.getString("habilidades"));
				a.setNomePai(rs.getString("nomePai"));
				a.setProfissaoPai(rs.getString("profissaoPai"));
				a.setNomeMae(rs.getString("nomeMae"));
				a.setProfissaoMae(rs.getString("profissaoMae"));
				a.setSenha(rs.getString("senha"));
				alunos.add(a);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return alunos;
	}
	
	public List<Aluno> listarAlunosPorNome(String nome) { 
		List<Aluno> alunos = new ArrayList<Aluno>();
		PreparedStatement ps = null;
		try {
			String query = "SELECT * FROM pessoa WHERE egresso = 0AND nome like '%" + nome + "%'";
			ps = conexao.getPreparedStatement(query);
			ResultSet rs = ps.executeQuery();
			while (rs.next()) {
				Aluno a = new Aluno();
				a.setMatricula(rs.getString("idPessoa"));
				a.setNome(rs.getString("nome"));
				a.setTelefone(rs.getString("telefone"));
				a.setCpf(rs.getString("cpf"));
				a.setRg(rs.getString("rg"));
				a.setLogradouro(rs.getString("logradouro"));
				a.setNumero(rs.getString("numero"));
				a.setBairro(rs.getString("bairro"));
				a.setCidade(rs.getString("cidade"));
				a.setUF(rs.getString("uf"));
				a.setComplemento(rs.getString("complemento"));
				a.setEmail(rs.getString("email"));
				a.setHabilidades(rs.getString("habilidades"));
				a.setNomePai(rs.getString("nomePai"));
				a.setProfissaoPai(rs.getString("profissaoPai"));
				a.setNomeMae(rs.getString("nomeMae"));
				a.setProfissaoMae(rs.getString("profissaoMae"));
				a.setSenha(rs.getString("senha"));
				alunos.add(a);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return alunos;
	}

	public Aluno recuperarPorMatricula(String matricula) { 
		PreparedStatement ps = null;
		Aluno a = new Aluno();
		try {
			String query = "SELECT * FROM pessoa WHERE idPessoa=?";
			ps = conexao.getPreparedStatement(query);
			ps.setString(1, matricula);
			ResultSet rs = ps.executeQuery();
			while (rs.next()) {
				a.setMatricula(rs.getString("idPessoa"));
				a.setNome(rs.getString("nome"));
				a.setTelefone(rs.getString("telefone"));
				a.setCpf(rs.getString("cpf"));
				a.setRg(rs.getString("rg"));
				a.setLogradouro(rs.getString("logradouro"));
				a.setNumero(rs.getString("numero"));
				a.setBairro(rs.getString("bairro"));
				a.setCidade(rs.getString("cidade"));
				a.setUF(rs.getString("uf"));
				a.setComplemento(rs.getString("complemento"));
				a.setEmail(rs.getString("email"));
				a.setHabilidades(rs.getString("habilidades"));
				a.setNomePai(rs.getString("nomePai"));
				a.setProfissaoPai(rs.getString("profissaoPai"));
				a.setNomeMae(rs.getString("nomeMae"));
				a.setProfissaoMae(rs.getString("profissaoMae"));
				a.setSenha(rs.getString("senha"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return a;
	}
	
	public Aluno logar(String id, String senha){
		Aluno a = recuperarPorMatricula(id);
		if(senha.equals(a.getSenha()))
			return a;
		else
			return null;
			
	}

	public void editarSenha(Aluno a){
		PreparedStatement ps = null;
		try {
			String query = "UPDATE pessoa SET senha=? WHERE idPessoa=?";
			
			ps = conexao.getPreparedStatement(query);

			ps.setString(1, a.getSenha());
			ps.setString(2, a.getMatricula());
			
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}
